
/**********************************************************************************\
** 文件名称: cmd.h
** 创建人员: YCG
** 创建日期: 2018-12-22
** 文档描述:
** 版本代号: V0.1
** 版本说明: 初始版本
\********************************************************************************/
#ifndef __CMD_H_
#define __CMD_H_
#include "main.h"
#include "heap.h"

//#define CMD_DEBUG
#ifdef  CMD_DEBUG
#include "MessageOut.h"
#define  CMD_Printf(fmt,...)   Uprintf(fmt,__VA_ARGS__)
#else
#define  CMD_Printf(...)
#endif

#define  CMD_FALSE   (0)
#define  CMD_TRUE    (1)
#define  CMD_DAT_NUM  4  //能够携带的数据数量

struct CMD_T;
typedef struct CMD_T  CmdHead_t;
struct CMD_T
{
    volatile uint32_t Cmd;               //命令存放
    void*    Target;                     //控制目标
    void     (*SendCallBack)(CmdHead_t* yCmdHead, uint8_t yCmd);  //回调函数
    uint8_t  CmdDat[CMD_DAT_NUM];        //命令数据
};

CmdHead_t* Cmd_Create(void (*ySendCallBack)(CmdHead_t* yCmdHead, uint8_t yCmd));
void Cmd_Init(CmdHead_t *yCmdHead, void (*ySendCallBack)(CmdHead_t* yCmdHead, uint8_t yCmd));
void Cmd_SendDat(CmdHead_t* yCmdHead, uint8_t yCmd, uint8_t yDat);
void Cmd_SendCmd(CmdHead_t* yCmdHead, uint8_t yCmd);
uint8_t Cmd_IsSet(CmdHead_t* yCmdHead, uint8_t yCmd);
uint8_t Cmd_ReadCmd(CmdHead_t* yCmdHead, uint8_t yCmd);
uint8_t Cmd_ReadDat(CmdHead_t* yCmdHead, uint8_t yCmd) ;
#endif

/********************************End of File************************************/
